iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 15
1
Modern Web

30天成為Laravel萌新系列 第 15

30天成爲Laravel萌新(第14天) - 控制器(Controller)

  • 分享至 

  • xImage
  •  

回頭看看,看,怎麼Route的內容變得這麼長阿!仔細一看,還做了路由以外的事情,像是修改變數內容等等。是不是該把Hangle Function獨立出來?有什麼辦法?Laravel的控制器(Controller)可以幫助。

新增Controller

我們可以透過Artisan來快速新增一個標準的控制器(Controller):

artisan make:controller Blog/ExamplePostController

app/Http/Controllers/Blog資料夾下會多一個ExamplePostController.php的檔案,內容大致如下:

<?php

namespace App\Http\Controllers\Blog;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class ExamplePostController extends Controller
{
    //
}

Blog這個新建立的資料夾,實際對應於昨日group路由當中的'namespace' => 'Blog'參數。並且在上面生成的程式中use App\Http\Controllers\Controller;,也是因為這個新建立的模組是在App\Http\Controllers\Blog底下的命名空間,因此要引入使用App\Http\Controllers\Controller。關於PHP的模組系統,就不多做解釋了,只是相關的Blog字串如不想使用,要做相對應的調整。

之後會改用資源控制器。這邊單純要做個對照,之後可以刪除不使用。

把處理程式移進控制器中

在新建立的Controller類別中,提供show的方法來處理請求:

class ExamplePostController extends Controller
{
    function show($post_id){
        $title = "Example Title";
        $content = "Example Content";

        $title = '日的及度加機子魚年';
        $content = '# Nisi virgine......';

        {
            $Parsedown = new Parsedown();
            $content = $Parsedown->text($content);
        }

        return view('blog.post', [
            "title" => $title,
            'content' => $content,
        ]);
    }
}

喔!對了,用到的Parsedown,記得用use \Parsedown;引入使用。那麼現在路由乾淨多了:

Route::group(['prefix' => 'blog',
              'as' => 'blog/',
              'namespace' => 'Blog', ],

             function(){
                  Route::get('/post/{post_id}', "ExamplePostController@show");
              });

把原本處理請求的函式,修改為"ExamplePostController@show"字串。意思是使用ExamplePostControllershow方法。同樣的,如果沒有加上namespace參數,會需要改用"Blog\ExamplePostController@show"


之後會來把文章存入資料庫,在從資料庫取用。喔對!還會用到資源控制器(Resource Controller)。明天見~


上一篇
30天成爲Laravel萌新(第13天)- 簡易Blog頁面(下)
下一篇
30天成爲Laravel萌新(第15天) - 建立資料庫Migration
系列文
30天成為Laravel萌新32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言